    Help for FTP/X

Properties            Events            Methods

Registration Information

Order Form

Getting Custom Controls Written

Licensing Information

Description

Mabry's FTP/X ActiveX control provides easy, high-level access to the complete FTP client protocol (we follow the Internet standard, RFC 959).  FTP/X has powerful built-in features to support debugging and non-standard servers (using the Quote method).  FTP/X even supports two different modes of operation, asynchronous or synchronous, to make including it in your project even easier.

FTP/X is a light ActiveX control, which means that it doesn't require any bulky DLLs to run.  Your web-based applications (VBScript, ASP, etc.) will download faster, your installation package will be smaller, and you'll have no problems with different versions of DLLs on your users' systems.  And, because it's an ActiveX control, FTP/X will run in Visual Basic, Visual FoxPro, Internet Explorer, Delphi and any other environment that supports ActiveX controls.

FTP/X is firewall friendly complying with the Firewall-Friendly FTP Specification (RFC 1579).  Even from behind your corporate firewall, your applications will be able to communicate with external FTP servers.

Mabry's FTP/X ActiveX control requires no user input to run.  The FTP/X control can run completely in the background under program control.  This allows your program to take care of file transfers while the user performs other tasks.

File Name

MFTPX.OCX

ActiveX / OCX Object Name

Mabry.FtpX.1

ActiveX Compatility

VB 4.0 (32-bit) and 5.0

ActiveX Built With

Microsoft Visual C++ v5

ActiveX - Required DLLs

None.  This is a light ActiveX control that requires no extra DLLs to operate. This means that your installation packages will be smaller.  And, your web pages will load faster, since there are no extra DLLs to download.

Distribution Note    When you develop and distribute an application that uses this control, you should install the control file into the user's Windows SYSTEM directory.  The control file has version information built into it.  So, during installation, you should ensure that you are not overwriting a newer version.


FTP/X Properties

Properties that have special meaning for this control or that only apply to this control are marked with an asterisk (*).

*Account Property

*Action Property

*AllocBytes Property

*Blocking Property

*DebugMode Property

*Directory Property

*DisablePasv Property

*DstFilename Property

*Host Property

*LastError Property

*LogonName Property

*LogonPassword Property

*Pattern Property

*Port Property

*QuoteCmd Property

*ReadData Property

*SrcFilename Property

*State Property

*Timeout Property

*Type Property

*Version Property


FTP/X Events

Events that have special meaning for this control or that only apply to this control are marked with an asterisk (*).

*AsyncError Event

*Connected Event

*Debug Event

*DirItem Event

*Done Event

*Progress Event


FTP/X Methods

Methods that have special meaning for this control or that only apply to this control are marked with an asterisk (*).

*Abort Method

*AboutBox Method

*Allocate Method

*Append Method

*ChangeDir Method

*Connect Method

*CreateDir Method

*Delete Method

*DeleteDir Method

*Disconnect Method

*GetCurrentDir Method

*GetDirList Method

*GetFile Method

*GetFilenameList Method

*ParentDir Method

*PutFile Method

*PutUniqueFile Method

*Quote Method

*Read Method

*Reinitialize Method

*Rename Method

*SendType Method


Registration Information

CREDITS

FTP/X was written by Zane Thomas.

CONTACT INFORMATION

Orders, inquiries, technical support, questions, comments, etc. can be sent to mabry@mabry.com on the Internet.  Our mailing address/contact information is:

Mabry Software, Inc.

Post Office Box 31926

Seattle, WA  98103-1926

Sales: 1-800-99-MABRY (U.S. Only)

Voice: 206-634-1443

Fax: 206-632-0272 or 206-364-3196

Web: http://www.mabry.com

COST

The price of FTP/X (control only) is US$50 (US$55 for International orders).  The cost of FTP/X and the C/C++ source code (of the control itself) is US$125 (US$130 for International orders).

Prices are subject to change without notice.

DELIVERY METHODS

We can ship this software to you via air mail and/or e-mail.

Air Mail - you will receive disks, a printed manual, and printed receipt if you choose this delivery method.  The costs are:

US$5.00 	US Priority Mail

US$10.00 	Airborne Express 2nd Day (US deliveries only)

US$15.00 	Airborne Express Overnight (US deliveries only)

US$20.00 	Global Priority Mail (Int'l deliveries only; Western Europe, Pacific Rim and Canada only)

US$45.00 	International Airborne Express (Int'l deliveries only)

E-Mail - We can ship this package to you via e-mail.  You need to have an e-mail account that can accept large file attachments (which includes CompuServe, AOL, and most Internet providers).  If you choose this option, please note: a printed manual is not included.  We will, however, e-mail a receipt to you.

Be sure to include your full mailing address with your order.  Sometimes (on the Internet) the package cannot be e-mailed, so we are forced to send it through the normal mails.

CompuServe E-Mail - CompuServe members can use the software registration forum (GO SWREG) to register this package.  FTP/X's SWREG ID number is 15749.  The source code version's ID number is 15750.  PLEASE NOTE: When you order through SWREG, we send the registered package to your CompuServe account (not your Internet or AOL account) within a few hours.

ORDER / PAYMENT METHODS

You can order this software by phone, fax, e-mail, mail.  For your convenience, an order form has been provided that you can print out directly from this help file.

Please note that orders must include all information that is requested on our order form.   Your shipment WILL BE DELAYED if we have to contact you for additional information (such as phone number, street address, etc.).

You can pay by credit card (VISA, MasterCard, American Express), check (U.S. dollars drawn on a U.S. bank), cash, International Money Order, International Postal Order, Purchase Order (established business entities only - terms net 30), or wire transfer.

WIRE TRANSFER INFORMATION

Here is the information you need regarding our account for a wire funds transfer:

Bank Name: 	SeaFirst - Stone Way Branch

Bank Address: 	3601 Stone Way North

Seattle, WA  98103

Bank Phone: 	206-585-4951

Account Name: 	Mabry Software, Inc.

Routing Number: 	12000024

Account Number: 	16311706

If you are paying with a wire transfer of funds, please add US$12.50 to your order.  This is the fee that SeaFirst Bank charges Mabry Software.  Also, please ADD ANY ADDITIONAL FEES THAT YOUR BANK MAY CHARGE for wire transfer service. If you are paying with a  wire transfer, we must have full payment deposited to our account before we can ship your order.

Copyright © 1997 by Mabry Software, Inc.


Order Form
 FTP/X Order Form

Use the Print Topic... command from the File menu to print this order form.

Mail this 	Mabry Software, Inc.

form to: 	Post Office Box 31926

Seattle, WA  98103-1926

Phone: 206-634-1443

Fax: 206-632-0272 or 206-364-3196

Internet: mabry@mabry.com

Web: www.mabry.com

Where did you get this copy of FTP/X?

____________________________________________________________________

Name: 	____________________________________________________________________

Ship to: 	____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

____________________________________________________________________

Phone: 	_________________________________________________________________

Fax: 	_________________________________________________________________

E-Mail: 	_________________________________________________________________

MC/VISA/AMEX: _________________________________________ exp. __________________

P.O. # (if any): 	____________________ Signature ____________________________________

qty ordered 	____ 	REGISTRATION
$50.00 ($55.00 international).  Check or money order in U.S. currency drawn on a U.S. bank.  Add $5.00 per order for shipping and handling.

qty ordered 	____ 	SOURCE CODE AND REGISTRATION
$125.00 ($130.00 international).  Check or money order in U.S. currency drawn on a U.S. bank.  Add $5.00 per order for shipping and handling.


ChangeDir Example

This snippet of code shows how to change directories, once connected to a server.  You can change the setting of the Directory propery to change to the directory you need.

    Ftp1.Directory = "directoryname"
    Ftp1.Action = FtpActionChangeDir

Note: We used the Action property in this example because it is compatible for both the VBX and OCX-32 versions of the Mabry FTP control.  If you want to use the ChangeDir method (only available in the OCX-32 version of the control), you can use the following code:

    Ftp1.Directory = "directoryname"
    Ftp1.ChangeDir


Connect Example

This snippet of code shows how to connect to Mabry's FTP server.  You can change the settings of the Host, LogonName and LogonPassword properties to connect to other servers.

    Ftp1.Blocking = True
    Ftp1.Host = "ftp.mabry.com"
    Ftp1.LogonName = "anonymous"
    Ftp1.LogonPassword = "you@yourdomain.com"
    Ftp1.Action = FtpActionConnect

Note: We used the Action property in this example because it is compatible for both the VBX and OCX-32 versions of the Mabry FTP control.  If you want to use the Connect method (only available in the OCX-32 version of the control), you can use the following code:

    Ftp1.Blocking = True
    Ftp1.Host = "ftp.mabry.com"
    Ftp1.LogonName = "anonymous"
    Ftp1.LogonPassword = "you@yourdomain.com"
    Ftp1.Connect


Error Codes

Constant	   	Value	   	Description

0	No error.

WSAEINTR	10004	System level interrupt interrupted socket operation.

WSAEBADF	10009	Generic error for invalid format, bad format.

WSAEACCES	10013	Generic error for access violation.

WSAEFAULT	10014	Generic error for fault.

WSAEINVAL	10022	Generic error for invalid format, entry, etc.

WSAEMFILE	10024	Generic error for file error.

10025	The IP address provided is not valid or the host specified by the IP does not exist.

WSAEWOULDBLOCK	10035	The socket is marked as non-blocking and the operation would block.  You will be notified when the operation completes.  This is just a warning, your operation will complete successfully.  It is safe to ignore this error code.

WSAEINPROGRESS	10036	This error is returned if any Windows Sockets function is called while a blocking function is in progress.

WSAEALREADY	10037	The asynchronous routine being canceled has already completed.

WSAENOTSOCK	10038	Invalid socket or not connected to remote.

WSAEDESTADDRREQ	10039	A destination address is required.

WSAEMSGSIZE	10040	The socket is of type ASocketDatagram, and the datagram is larger than the maximum supported by the Windows Sockets implementation.

WSAEPROTOTYPE	10041	The specified port is the wrong type for this socket.

WSAENOPROTOOPT	10042	The option is unknown or unsupported.

WSAEPROTONOSUPPORT	10043	The specified port is not supported.

WSAESOCKTNOSUPPORT	10044	The specified socket type is not supported in this address family.

WSAEOPNOTSUPP	10045	The referenced socket is not a type that supports connection-oriented service.

WSAEAFNOSUPPORT	10047	Addresses in the specified family cannot be used with this socket.

WSAEADDRINUSE	10048	The specified address is already in use.

WSAEADDRNOTAVAIL	10049	The specified address is not available.

WSAENETDOWN	10050	The connected network is not available.

WSAENETUNREACH	10051	The connected network is not reachable.

WSAENETRESET	10052	The connected network connection has been reset.

WSAECONNABORTED	10053	The current connection has been aborted by the network or intermediate services.

WSAECONNRESET	10054	The current socket connection has been reset.

WSAENOBUFS	10055	No buffer space is available. The socket cannot be connected.

WSAEISCONN	10056	The socket is already connected.

WSAENOTCONN	10057	The current socket has not been connected.

WSAESHUTDOWN	10058	The connection has been shutdown.

WSAETIMEDOUT	10060	The current connection has timed out.

WSAECONNREFUSED	10061	The requested connection has been refused by the remote host.

WSAENAMETOOLONG	10063	Specified host name is too long.

WSAEHOSTDOWN	10064	Remote host is currently unavailable.

WSAEHOSTUNREACH	10065	Remote host is currently unreachable.

WSASYSNOTREADY	10091	Remote system is not ready.

WSAVERNOTSUPPORTED	10092	Current socket version not supported by application.

WSANOTINITIALISED	10093	Socket API is not initialized.

WSAEDISCON	10101	Socket has been disconnected.

WSAHOST_NOT_FOUND	11001	Remote host could not be found.

WSATRY_AGAIN	11002	Remote host could not be found, try again.

WSANODATA	11004	Remote host could not be found.

20200	Command okay.

20202	Command not implemented, superfluous at this site.

20211	System status, or system help reply.

20212	Directory status.

20213	File status.

20214	Help message. On how to use the server or the meaning of a particular non-standard command.  This reply is useful only to the human user.

20215	NAME system type. Where NAME is an official system name from the list in the Assigned Numbers document.

20220	Service ready for new user.

20221	Service closing control connection.  Logged out if appropriate.

20225	Data connection open; no transfer in progress.

20226	Closing data connection. Requested file action successful (for example, file transfer or file abort).

20227	Entering Passive Mode (h1,h2,h3,h4,p1,p2).

20230	User logged in, proceed.

20250	Requested file action okay, completed.

20257	"PATHNAME" created.

20421	Service not available, closing control connection.  This may be a reply to any command if the service knows it must shut down.

20425	Can't open data connection.

20426	Connection closed; transfer aborted.

20450	Requested file action not taken.  File unavailable (e.g., file busy).

20451	Requested action aborted: local error in processing.

20452	Requested action not taken.  Insufficient storage space in system.

20500-20599	Errors reported by the server.

20501	Syntax error in parameters or arguments.

20502	Command not implemented.

20503	Bad sequence of commands.

20504	Command not implemented for that parameter.

20530	Not logged in.

20532	Need account for storing files.

20550	Requested action not taken.  File unavailable (e.g., file not found, no access).

20551	Requested action aborted: page type unknown.

20552	Requested file action aborted.  Exceeded storage allocation (for current directory or dataset).

20553	Requested action not taken.  File name not allowed.

20601	Unexpected server response.

20600	Internal control state error.

20602	Already connected to server.

20603	Busy executing asynchronous command.

20604	Can't change blocking mode, busy or connected to server.

20605	Operation timed out.

20606	Invalid user name.

20607	Invalid password.

20608	Could not open file.


Abort Method See Also
See Also

Blocking Property


Account Property See Also
See Also

Action Property

LogonName Property

LogonPassword Property

Connect Method


Action Property See Also
See Also

LastError Property

AsyncError Event

Done Event


Allocate Method See Also
See Also

Action Property

AllocBytes Property

LastError Property


AllocBytes Property See Also
See Also

Allocate Method

PutFile Method


Append Method See Also
See Also

Action Property

DstFilename Property

SrcFilename Property

Done Event

Allocate Method

PutFile Method


AsyncError Event See Also
See Also

Action Property

Blocking Property

Done Event


Blocking Property See Also
See Also

Action Property

AsyncError Event

Done Event

Connect Method

Disconnect Method


ChangeDir Method See Also
See Also

Action Property

Directory Property

Done Event

GetDirList Method

ParentDir Method


Connect Method See Also
See Also

Account Property

Action Property

Host Property

LogonName Property

LogonPassword Property

Connected Event

Done Event

Disconnect Method

Reinitialize Method


Connected Event See Also
See Also

Action Property

State Property

Connect Method

Disconnect Method

Reinitialize Method


CreateDir Method See Also
See Also

Action Property

Directory Property

Done Event

ChangeDir Method

DeleteDir Method

ParentDir Method


Debug Event See Also
See Also

DebugMode Property


DebugMode Property See Also
See Also

Debug Event


Delete Method See Also
See Also

SrcFilename Property

Done Event

DeleteDir Method


DeleteDir Method See Also
See Also

Action Property

Directory Property

Done Event

ChangeDir Method

CreateDir Method


Directory Property See Also
See Also

Action Property

ChangeDir Method

GetCurrentDir Method


DirItem Event See Also
See Also

Action Property

GetDirList Method

GetFilenameList Method


Disconnect Method See Also
See Also

Connected Event

Abort Method

Connect Method

Reinitialize Method


Done Event See Also
See Also

Blocking Property

AsyncError Event


DstFilename Property See Also
See Also

SrcFilename Property

GetFile Method

PutFile Method

Rename Method


GetCurrentDir Method See Also
See Also

Action Property

Directory Property

ChangeDir Method

CreateDir Method

DeleteDir Method

ParentDir Method


GetDirList Method See Also
See Also

Action Property

DirItem Event

Done Event

GetFilenameList Method


GetFile Method See Also
See Also

Action Property

DstFilename Property

SrcFilename Property

Done Event

Progress Event

Allocate Method

Append Method

PutFile Method

SendType Method


GetFilenameList Method See Also
See Also

Action Property

Pattern Property

DirItem Event

Done Event

GetDirList Method


Host Property See Also
See Also

Port Property

Connect Method


LastError Property See Also
See Also

Action Property

AsyncError Event

Done Event


LogonName Property See Also
See Also

Account Property

Action Property

LogonPassword Property

Connect Method


LogonPassword Property See Also
See Also

Account Property

Action Property

LogonName Property

Connect Method


ParentDir Method See Also
See Also

Action Property

Done Event

ChangeDir Method

CreateDir Method

GetDirList Method


Pattern Property See Also
See Also

Action Property

GetDirList Method

GetFilenameList Method


Port Property See Also
See Also

Host Property

Connect Method


Progress Event See Also
See Also

Action Property

GetFile Method

PutFile Method


PutFile Method See Also
See Also

Action Property

DstFilename Property

SrcFilename Property

Done Event

Progress Event

Allocate Method

Append Method

GetFile Method

SendType Method


PutUniqueFile Method See Also
See Also

Action Property

SrcFilename Property

Done Event

Progress Event

Allocate Method

GetFile Method

PutFile Method

SendType Method


Quote Method See Also
See Also

Done Event

QuoteCmd Property

Read Method

ReadData Property


QuoteCmd Property See Also
See Also

ReadData Property

Done Event

Quote Method

Read Method


Read Method See Also
See Also

Done Event

ReadData Property

Quote Method


ReadData Property See Also
See Also

Action Property

Done Event

Read Method


Reinitialize Method See Also
See Also

Account Property

Action Property

Host Property

LogonName Property

LogonPassword Property

Connected Event

Done Event

Connect Method

Disconnect Method


Rename Method See Also
See Also

Action Property

DstFilename Property

SrcFilename Property

Done Event

Append Method

PutFile Method

SendType Method


SendType Method See Also
See Also

Action Property

Type Property

Done Event

GetFile Method

PutFile Method


SrcFilename Property See Also
See Also

Action Property

GetFile Method

PutFile Method

Rename Method


State Property See Also
See Also

Action Property

Connect Method

Disconnect Method

Reinitialize Method


Timeout Property See Also
See Also

AsyncError Event

Done Event


Type Property See Also
See Also

Action Property

GetFile Method

PutFile Method


Abort Method

See Also            Error Codes

Description

Cancels commands in progress.  Only valid when Blocking is False.

Syntax

object.Abort

The syntax of the Abort method has these parts:

Part	   	Description

object	Required. An FTP/X control.

Remarks

Used to cancel commands when the Blocking property is False.  File transfer commands may be canceled using the Abort method regardless of the state of the Blocking property.  However, it is recommended, if your user-interface requires that the user be able to cancel transfers, that the Blocking property be set to False so that user actions can be rapidly serviced.


AboutBox Method

Error Codes

Description

Displays the About Box for the control.

Syntax

object.AboutBox

The syntax of the AboutBox method has these parts:

Part	   	Description

object	Required. An FTP/X control.

Remarks

This method displays the About Box for this control which includes copyright information.


Account Property

See Also            Error Codes

Description

Account name to use when connecting to the FTP server.

Syntax

object.Account [= string ]

The syntax of the Account property has these parts:

Part	   	Description

object	An FTP/X control.

string	A string expression that holds an account name for logging on to the FTP server.

Remarks

Some servers may require that an account name be supplied in addition to the LogonName and LogonPassword.  For servers which require an account, this property must be set before invoking the Connect method.

Data Type

String


Action Property

See Also            Error Codes

Description

Causes control to initiate a command / method.

Syntax

object.Action [= action ]

The syntax of the Action property has these parts:

Part	   	Description

object	An FTP/X control.

action	An integer that specifies which method to execute.

Remarks

Setting this property makes the FTP control perform an action.  The action depends on the value set.  FTP accepts the following:

Constant	   	Value	   	Description

FtpActionNone	0	No action

FtpActionAbort	1	Abort current action (Abort)

FtpActionAllocate	2	Allocate server storage (Allocate)

FtpActionAppend	3	Append to server file (Append)

FtpActionChangeDir	4	Change server directory (ChangeDir)

FtpActionConnect	5	Connect to server (Connect)

FtpActionCreateDir	6	Create server directory (CreateDir)

FtpActionDelete	7	Delete server file (Delete)

FtpActionDeleteDir	8	Delete server directory (DeleteDir)

FtpActionDisconnect	9	Disconnect from server (Disconnect)

FtpActionGetCurrentDir	10	Get current server directory (GetDirList)

FtpActionGetDirList	11	Get server directory listing (GetDirList)

FtpActionGetFile	12	Get server file (GetFile)

FtpActionGetFilenameList	13	Get server filename list (GetFilenameList)

FtpActionParentDir	14	Change to server parent directory (ParentDir)

FtpActionPutFile	15	Send file to server (PutFile)

FtpActionPutUniqueFile	16	Send file to server, server chooses name (PutUniqueFile)

FtpActionSendType	17	Set transfer type (SendType)

FtpActionRead	18	Read response from server (Read)

FtpActionRename	19	Rename server file (Rename)

FtpActionReinitialize	20	Reinitialize session (Reinitialize)

FtpActionQuote	22	Quote command (Quote)

Data Type

Integer (enumerated)


Allocate Method

See Also            Error Codes

Description

Allocates file space on the FTP server for storage.

Syntax

object.Allocate bytecount

The syntax of the Allocate method has these parts:

Part	   	Description

object	Required. An FTP/X control.

bytecount	Optional. A long integer expression holding the number of bytes to allocate. If not specified, the AllocBytes property is used.

Remarks

Some FTP servers require you to allocate storage for a file before sending it.  The Allocate method is used to perform this allocation, requesting the server to allocate the number of bytes of storage specified by the AllocBytes property.

Many servers do not actually require that this command be used.  The FTP specification requires servers to ignore this command if they do not require/support it.

To be safe under all circumstances, you should always use Allocate before sending any file and then ignore any 205xx errors (see the LastError property) which may be returned.  Do not, however, ignore 204xx errors since the server may be indicating that it cannot fulfill the request at this time.


AllocBytes Property

See Also            Error Codes

Description

Number of bytes to allocate on the server's storage system.

Syntax

object.AllocBytes [= long ]

The syntax of the AllocBytes property has these parts:

Part	   	Description

object	An FTP/X control.

long	A long integer that specifies the number of bytes to pre-allocate on the FTP server.

Remarks

Some servers require that you allocate storage for a file before sending it with the PutFile method.  Set the AllocBytes property to the source file size before invoking the Allocate method.

Data Type

Integer (long)


Append Method

See Also            Error Codes

Description

Appends to a file on the FTP server.

Syntax

object.Append srcfilename, dstfilename

The syntax of the Append method has these parts:

Part	   	Description

object	Required. An FTP/X control.

srcfilename	Optional. A string expression holding the source filename.  If not specified, the SrcFilename property is used.

dstfilename	Optional. A string expression specifying the destination filename. If not specified, the DstFilename property is used.

Remarks

Appends data from the local file named by the srcfilename parameter to the FTP server's file, named by the dstfilename parameter. If dstfilename does not exist, it is created on the server.

Some servers may require you to use the Allocate method prior to starting a file transfer.


AsyncError Event

See Also            Error Codes

Description

Fired when an error occurs during asynchronous operations.

Syntax

Sub object_AsyncError([index As Integer,] errornumber As Integer, errormessage As String)

The syntax of the AsyncError event has these parts:

Part	   	Description

object	An FTP/X control.

index	An integer that identifies a control if it's in a control array.

errornumber	An integer that holds the current error number.

errormessage	A string expression that holds text describing the current error.

Remarks

If an error occurs during the execution of asynchronous commands (only possible when Blocking is set to False) the program is notified by firing the AsyncError event.


Blocking Property

See Also            Error Codes

Description

Determines if methods or actions are blocking.

Syntax

object.Blocking [= boolean ]

The syntax of the Blocking property has these parts:

Part	   	Description

object	An FTP/X control.

boolean	A boolean flag that determines if the control waits for completion of an operation (True), or returns control to the program immediately (False).

Remarks

If this property is set to True, any commands using either the Action property or any of the methods will not return to your code until the command completes.  In other words, the command will be handled synchronously.

If this property is false, any commands are handled asynchronously.  They return to you immediately.  You are notified of completion with the Done event.  When the user-interface requires that the user be able to cancel file transfers, it is recommended that Blocking be set to False so that your program can respond quickly to user actions.

Important Note: The Blocking property must not be changed while a connection is established.  You should only change the Blocking property when the control is not connected to a server.  Changing the Blocking property while connected could cause some strange behavior in the control.

Data Type

Integer (boolean)


ChangeDir Method

See Also            Error Codes

Description

Changes the current directory on the FTP server.

Syntax

object.ChangeDir directory

The syntax of the ChangeDir method has these parts:

Part	   	Description

object	Required. An FTP/X control.

directory	Optional. A string expression holding the desired new directory.  If not specified, the Directory property is used.

Remarks

Changes the server's current directory to that specified by the directory parameter.


Connect Method

See Also            Error Codes

Description

Connects to an FTP server.

Syntax

object.Connect username, password, account

The syntax of the Connect method has these parts:

Part	   	Description

object	Required. An FTP/X control.

username	Optional. A string expression holding the user's name.  If not specified, the LogonName property is used.

password	Optional. A string expression specifying the user's password. If not specified, the LogonPassword property is used.

account	Optional. A string expression specifying the user's account name. If not specified, the Account property is used.

Remarks

Connects to FTP server named by the Host property.  The username and password parameters are used during connection.  The these parameters are not specified, the LogonName and LogonPassword properties are used.

Some hosts may also require a valid account parameter.

Upon connection, the FTP control fires the Connected event.


Connected Event

See Also            Error Codes

Description

Fires when connection state changes.

Syntax

Sub object_Connected([index As Integer,] connectstate As Boolean)

The syntax of the Connected event has these parts:

Part	   	Description

object	An FTP/X control.

index	An integer that identifies a control if it's in a control array.

connectstate	A boolean flag that specifies whether or not the control is connected to an FTP server.

Remarks

Fired when the connection state changes.  The connectstate parameter is True after a successful Connect or Reinitialize method execution.

The connectstate parameter is False after the Disconnect method completes or if the server closes the connection.


CreateDir Method

See Also            Error Codes

Description

Creates a directory on the FTP server.

Syntax

object.CreateDir directory

The syntax of the CreateDir method has these parts:

Part	   	Description

object	Required. An FTP/X control.

directory	Optional. A string expression holding the desired new directory.  If not specified, the Directory property is used.

Remarks

Creates a remote directory named by the directory parameter.


DebugMode Property

See Also            Error Codes

Description

Enables and disables the Debug event.

Syntax

object.DebugMode [= debugflag ]

The syntax of the DebugMode property has these parts:

Part	   	Description

object	An FTP/X control.

debugflag	An integer that determines if Debug events are fired.

Remarks

Setting Debug to one (1) enables the Debug event.  Setting it to zero (0) disables the Debug event.  All other values are invalid at this time.

Data Type

Integer (enumerated)


Debug Event

See Also            Error Codes

Description

Fired when the control has debugging information for the program.

Syntax

Sub object_Debug([index As Integer,] message As String)

The syntax of the Debug event has these parts:

Part	   	Description

object	An FTP/X control.

index	An integer that identifies a control if it's in a control array.

message	A string expression that holds a debugging message from the control.

Remarks

The Debug event is enabled by setting the DebugMode property to a non-zero value (1 is the only permitted non-zero value at this time).  When the DebugMode property is non-zero, the Debug event will fire as messages are sent to and received from the server.  Printing the Message argument string to Visual Basic's debug window will help you understand what is happening as you debug your application.


Delete Method

See Also            Error Codes

Description

Delete's a file from the FTP server.

Syntax

object.Delete dstfilename

The syntax of the Delete method has these parts:

Part	   	Description

object	Required. An FTP/X control.

dstfilename	Optional. A string expression that specifies a filename to delete from the FTP server.

Remarks

This method deletes a file, specified by dstfilename, from the FTP server.


DeleteDir Method

See Also            Error Codes

Description

Deletes a directory on the FTP server.

Syntax

object.DeleteDir directory

The syntax of the DeleteDir method has these parts:

Part	   	Description

object	Required. An FTP/X control.

directory	Optional. A string expression holding the desired new directory.  If not specified, the Directory property is used.

Remarks

Deletes a directory named by the directory parameter.


Directory Property

See Also            Error Codes

Description

Current directory on FTP server.

Syntax

object.Directory [= directory ]

The syntax of the Directory property has these parts:

Part	   	Description

object	An FTP/X control.

directory	A string expression that specifies a directory on the FTP server.

Remarks

You set this property to the FTP server directory you wish to change to before using the ChangeDir method or Action.  This property is set to the server's current directory upon completion of the GetCurrentDir method or Action.

Data Type

String


DirItem Event

See Also            Error Codes

Description

Fired for each directory line received.

Syntax

Sub object_DirItem([index As Integer,] item As String)

The syntax of the DirItem event has these parts:

Part	   	Description

object	An FTP/X control.

index	An integer that identifies a control if it's in a control array.

item	A string expression that contains a directory list item retrieved from the FTP server.

Remarks

Fired for each line returned from the server for either the GetDirList or GetFilenameList methods.


Disconnect Method

See Also            Error Codes

Description

Performs a normal disconnect from the FTP server.

Syntax

object.Disconnect

The syntax of the Disconnect method has these parts:

Part	   	Description

object	Required. An FTP/X control.

Remarks

When connected to an FTP server the Disconnect method simply disconnects.  Upon disconnection, the FTP control fires the Connected event.


DisablePasv Property

Description

Used to disable use of PASV command with servers that don't implement it correctly.

Syntax

object.DisablePasv [= boolean ]

The syntax of the DisablePasv property has these parts:

Part	   	Description

object	An FTP/X control.

boolean	A boolean expression that determines if the FTP control uses the PASV command.

Remarks

The FTP protocol requires that data transfers are preceded by either a PORT or PASV command.  The PASV command must be used with servers that are behind firewalls.  However, some server/firewall combinations are not responding to the PASV command as required by the applicable RFCs.  This causes the control to timeout when initiating data transfers.

The DisablePasv property provides a way to deal with such servers.  When DisablePasv is set to True the PASV command will not be used and the PORT command is used instead.

The recommended way to use the DisablePasv property is to first attempt a data transfer with DisablePasv set to False.  If the transfer fails because the server fails to respond correctly then an error 10004 will be returned when Blocking = True, and AsyncError will be fired with an error code of 20605 when Blocking = False.

At this point, unless you have an unusually long timeout value set, the server will be "hung" and you must disconnect from the server, set DisablePasv to True and then reconnect, after which data transfers will probably work.  If the server still fails to transfer data after following this procedure, then it's completly broken.

The following code shows how you might handle the situation:

Private Sub cmdDirList_Click()
    ClearListDir
    MainForm.Ftp1.Pattern = txtPattern.Text
    On Error Resume Next
    MainForm.Ftp1.Action = FtpActionGetDirList
    If (Err = 10004) Then
        MainForm.Ftp1.Timeout = 5
        MainForm.Ftp1.Action = FtpActionDisconnect
        MainForm.Ftp1.Timeout = 30
        On Error GoTo 0
        MainForm.Ftp1.Action = FtpActionConnect
        MainForm.Ftp1.DisablePasv = True
        MainForm.Ftp1.Action = FtpActionGetDirList
    End If
End Sub

The timeout value is set to 5 seconds since the server is most likely hung at this point and there's no sense in waiting a long time for the control to timeout again.

Note that you will be able to determine whether the DisablePasv property must be set to True when you attempt the first data transfer.  The error will occur with file transfers too, so you need to be sure to handle the situation in all cases where a data transfer may be the first operation you attempt with a given server.

Data Type

Integer (boolean)


Done Event

See Also            Error Codes

Description

Fired when an asynchronous operation completes.

Syntax

Sub object_Done([index As Integer])

The syntax of the Done event has these parts:

Part	   	Description

object	An FTP/X control.

index	An integer that identifies a control if it's in a control array.

Remarks

Fired when a method has finished executing without error.  If an error occurs during execution of any method and Blocking is True, then an error is thrown by the control and must be handled by On Error.

When Blocking is False, an error may be thrown during execution of a method as it is when Blocking is True.  However, errors which occur during background execution of methods when Blocking is False will result in firing of the AsyncError event.


DstFilename Property

See Also            Error Codes

Description

Destination file for file-oriented methods.

Syntax

object.DstFilename [= filename ]

The syntax of the DstFilename property has these parts:

Part	   	Description

object	An FTP/X control.

filename	A string expression that specifies the destination (resulting) filename in a file-oriented method.

Remarks

The GetFile, PutFile, and Rename methods all require both a source and destination filename.  See each command for details regarding the use of this property.

Data Type

String


GetCurrentDir Method

See Also            Error Codes

Description

Gets the current directory on the FTP server.

Syntax

object.GetCurrentDir

The syntax of the GetCurrentDir method has these parts:

Part	   	Description

object	Required. An FTP/X control.

Remarks

Retrieves the FTP server's current directory.  When the command completes, the Directory property will contain the server's response.


GetDirList Method

See Also            Error Codes

Description

Retrieves a verbose directory listing from the FTP server.

Syntax

object.GetDirList pattern

The syntax of the GetDirList method has these parts:

Part	   	Description

object	Required. An FTP/X control.

pattern	Optional. A string expression holding the search pattern (including wildcards) for the directory listing.  If not specified, the Pattern property is used.

Remarks

Requests a verbose listing of the files in the FTP server's current directory.  The exact format of the data returned may vary depending upon the system type.  For each line of the directory listing, the DirItem event is fired.


GetFile Method

See Also            Error Codes

Description

Retrieves a file from the FTP server.

Syntax

object.GetFile srcfilename, dstfilename

The syntax of the GetFile method has these parts:

Part	   	Description

object	Required. An FTP/X control.

srcfilename	Optional. A string expression holding the source filename.  If not specified, the SrcFilename property is used.

dstfilename	Optional. A string expression specifying the destination filename. If not specified, the DstFilename property is used.

Remarks

Copies data from the remote file named by the srcfilename parameter to the local file named by the dstfilename parameter.  If the destination file already exists, its contents are replaced; otherwise it is created


GetFilenameList Method

See Also            Error Codes

Description

Retrieves a terse directory listing from the FTP server.

Syntax

object.GetFilenameList pattern

The syntax of the GetFilenameList method has these parts:

Part	   	Description

object	Required. An FTP/X control.

pattern	Optional. A string expression holding the search pattern (including wildcards) for the directory listing.  If not specified, the Pattern property is used.

Remarks

Requests a name-only listing of the files in the FTP server's current directory. For each line of the directory listing, the DirItem event is fired.


Host Property

See Also            Error Codes

Description

Name or IP address of the FTP host.

Syntax

object.Host [= host ]

The syntax of the Host property has these parts:

Part	   	Description

object	An FTP/X control.

host	A string expression specifying the FTP host (either as a host name or IP address).

Remarks

Used to specify the name (or IP address directly) of the FTP host to use during execution of the next Connect method.

Data Type

String


LastError Property

See Also            Error Codes

Description

Holds the last error number reported.

Syntax

object.LastError

The syntax of the LastError property has these parts:

Part	   	Description

object	An FTP/X control.

Remarks

This property contains the result of the last method executed.  It is zero if the last method completed without error.  Otherwise, it contains an error code.

This property is read-only and only available at run-time.

Data Type

Integer


LogonName Property

See Also            Error Codes

Description

User name on the server.

Syntax

object.LogonName [= name ]

The syntax of the LogonName property has these parts:

Part	   	Description

object	An FTP/X control.

name	A string expression that holds a user name for logging on to the FTP server.

Remarks

FTP servers require that you supply a user name and password in order to connect to them.

Many FTP servers support logons by anonymous users, in which case the LogonName property should be set to "anonymous" and the LogonPassword property to the user's e-mail address, prior to invoking the Connect method.

Data Type

String


LogonPassword Property

See Also            Error Codes

Description

Password to use when connecting to the FTP server.

Syntax

object.LogonPassword [= password ]

The syntax of the LogonPassword property has these parts:

Part	   	Description

object	An FTP/X control.

password	A string expression that holds the password to use when logging on to an FTP server.

Remarks

FTP servers require a username and password.  This property is sent to the FTP server when it asks for a password.

Many FTP servers support anonymous user logons in which case the LogonName property should be set to "anonymous" and the LogonPassword property should be set to the user's e-mail address.

Data Type

String


ParentDir Method

See Also            Error Codes

Description

Changes to parent directory on FTP server.

Syntax

object.ParentDir

The syntax of the ParentDir method has these parts:

Part	   	Description

object	Required. An FTP/X control.

Remarks

Changes the FTP server's current directory to its parent directory.


Pattern Property

See Also            Error Codes

Description

Wildcard pattern for directory operations.

Syntax

object.Pattern [= pattern ]

The syntax of the Pattern property has these parts:

Part	   	Description

object	An FTP/X control.

pattern	A string expression that holds the filename/wildcard pattern for file-list-oriented methods.

Remarks

GetDirList and GetFilenameList permit the use of a wildcard pattern for selecting which files to list.

Setting the Pattern property appropriately (i.e., "S*" to list all files beginning with an upper-case S) prior to invoking either of those methods will restrict the list of files returned.

Data Type

String


Port Property

See Also            Error Codes

Description

Port number of the FTP server.

Syntax

object.Port [= port ]

The syntax of the Port property has these parts:

Part	   	Description

object	An FTP/X control.

port	An integer that specifies the port number to use to connect to the FTP server.

Remarks

This property specifies the port number to use when connecting (see the Connect method).  This property defaults to 21, and should normally be left at the default.

This property is used when a proxy server, firewall, etc. requires that the user connect to the FTP server using a different port.

Data Type

Integer


Progress Event

See Also            Error Codes

Description

Fired as lengthy operations progress.

Syntax

Sub object_Progress([index As Integer,] bytes As Long Integer)

The syntax of the Progress event has these parts:

Part	   	Description

object	An FTP/X control.

index	An integer that identifies a control if it's in a control array.

bytes	A long integer that holds the number of bytes sent to / received from the FTP server.

Remarks

During file transfers the Progress event is periodically fired.  The bytes argument lets you know how many bytes have been transferred as of the time the Progress event was fired.


PutFile Method

See Also            Error Codes

Description

Sends a file to the FTP server.

Syntax

object.PutFile srcfilename, dstfilename

The syntax of the PutFile method has these parts:

Part	   	Description

object	Required. An FTP/X control.

srcfilename	Optional. A string expression holding the source filename.  If not specified, the SrcFilename property is used.

dstfilename	Optional. A string expression specifying the destination filename. If not specified, the DstFilename property is used.

Remarks

Copies data from the local file named by the srcfilename parameter to the FTP server's file named by the dstfilename parameter.  If dstfilename already exists on the server, its contents are replaced.  If dstfilename does not exist, it is created.

Some servers may require you to use the Allocate method prior to starting a file transfer.


PutUniqueFile Method

See Also            Error Codes

Description

Transfers a file to the FTP server using a unique destination file name.

Syntax

object.PutUniqueFile srcfilename

The syntax of the PutUniqueFile method has these parts:

Part	   	Description

object	Required. An FTP/X control.

srcfilename	Optional. A string expression holding the source filename.  If not specified, the SrcFilename property is used.

Remarks

Copies data from the local file named by the srcfilename parameter to a uniquely named file on the FTP server.  The FTP server chooses the name of the destination file such that it is unique in the current directory.

Some servers may require you to use the Allocate method prior to starting a file transfer.


Quote Method

See Also            Error Codes

Description

Sends a command string to the server.

Syntax

object.Quote command

The syntax of the Quote method has these parts:

Part	   	Description

object	Required. An FTP/X control.

command	Optional. A string expression containing data to send to the FTP server.  If this is omitted, the FTP control uses the data in the QuoteCmd property.

Remarks

Used to write a command string to the server.  This method is useful for sending non-standard commands or for invoking some of the more obscure commands specified in RFC 959.  After the server finishes responding, the Done event is fired if the control is in non-blocking mode.  Upon completion of the Quote command, the ASCII response returned by the server can be read from the ReadData property.

Server responses consist of one or more lines of ASCII text.  The first line of the response always contains a three digit code and some "user-friendly" message (i.e., ddd Ok, I'll let you do that).  If the response contains more than one line, the three digits will be followed by a "-" character.  Any number of lines may follow a ddd- response.  The final line of the response will contain the same three digit code as the first line, but there will be no "-" character.  In other words, if the first three digits of the first line of the response are not followed by a dash then the response consists of a single line only.  Otherwise, the last line of the response will begin with three digits with no following dash character.

For most purposes only the first digit of the three-digit code is significant.  The first digits of the three-digit codes have the following meanings:

Value	   	Description

1	Positive Preliminary Reply
The requested action is being initiated; expect another reply before proceeding with a new command.

2	Positive Completion Reply
The requested action has been successfully completed.

3	Positive Intermediate Reply
The command has been accepted, but the requested action is being held in abeyance, pending receipt by the server of further information from the client.

4	Transient Negative Reply
The command was not accepted, but the error condition is temporary and the action may be requested again.

5	Permanent Negative Completion Reply
The command was not accepted and the requested action did not take place.

RFC 959 goes into greater detail regarding response codes and you would do well to read the RFC before trying to use the Quote command.

Also, note that some commands you might send with the Quote command (such as list) will attempt to initiate a data-transfer.  It is possible, using a socket control and Quote commands with the FTP control, to properly set up and handle a data-transfer type command, but this is far from simple and requires intimate familiarity with sockets and RFC 959.  For commands that require a data transfer, your best bet is to use the FTP control's methods and properties whenever possible.

The FTP control implements RFC recommendations for handling firewalls.  However, in cases where non-standard firewall implementations are causing a problem, the Quote command and a socket control for data-transfers provide a difficult, but doable, solution.


QuoteCmd Property

See Also            Error Codes

Description

Command sent to the server with the Quote method.

Syntax

object.QuoteCmd [= quote ]

The syntax of the QuoteCmd property has these parts:

Part	   	Description

object	An FTP/X control.

quote	A string expression that specifies the command to send to the FTP server.

Remarks

You can use the FTP control's Quote method (Action = FtpActionQuote) to send arbitrary commands to an FTP server.  This is often used to invoke a server's SITE command (the site command returns a list of site-specific commands implemented by the server), or to invoke a site-specific command from the list returned by the server.

See the Quote method for further information.

Data Type

String


Read Method

See Also            Error Codes

Description

Used to do "raw" reads of server responses.

Syntax

object.Read

The syntax of the Read method has these parts:

Part	   	Description

object	Required. An FTP/X control.

Remarks

Used to read the server's response after a command has been sent using the Quote method.  The Done event is fired when data arrives from the server after the Quote method has been invoked if the control is in non-blocking mode (see Blocking).


ReadData Property

See Also            Error Codes

Description

Data received from the Read method or its Action equivalent.

Syntax

object.ReadData

The syntax of the ReadData property has these parts:

Part	   	Description

object	An FTP/X control.

Remarks

There may be circumstances where you need to interact directly with the server.  This can happen if a particular server has non-standard extensions you choose to use.  The Read method lets you directly retrieve data sent by the server.  Upon successful completion of the Read method (or the Action property equivalent) the ReadData property will contain whatever the server sent.

Data Type

String


Reinitialize Method

See Also            Error Codes

Description

Ends, then re-starts the user's FTP session.

Syntax

object.Reinitialize username, password, account

The syntax of the Reinitialize method has these parts:

Part	   	Description

object	Required. An FTP/X control.

username	Optional. A string expression holding the user's name.  If not specified, the LogonName property is used.

password	Optional. A string expression specifying the user's password. If not specified, the LogonPassword property is used.

account	Optional. A string expression specifying the user's account name. If not specified, the Account property is used.

Remarks

Terminates the current user's FTP session and starts a new session using the LogonName, LogonPassword, and Account properties as they are used by the Connect method.


Rename Method

See Also            Error Codes

Description

Renames a file on the FTP server.

Syntax

object.Rename srcfilename, dstfilename

The syntax of the Rename method has these parts:

Part	   	Description

object	Required. An FTP/X control.

srcfilename	Optional. A string expression holding the source filename.  If not specified, the SrcFilename property is used.

dstfilename	Optional. A string expression specifying the destination filename. If not specified, the DstFilename property is used.

Remarks

Renames the remote file named by the srcfilename parameter to the name contained in the dstfilename parameter.


SendType Method

See Also            Error Codes

Description

Specifies the file transfer mode.

Syntax

object.SendType type

The syntax of the SendType method has these parts:

Part	   	Description

object	Required. An FTP/X control.

type	Optional. An integer expression holding the desired send type/method.  If not specified, the Type property is used.

Remarks

Sets the server's transfer mode to either ASCII (Type = 0) or Binary (Type = 1).


SrcFilename Property

See Also            Error Codes

Description

Source file for file-oriented methods.

Syntax

object.SrcFilename [= filename ]

The syntax of the SrcFilename property has these parts:

Part	   	Description

object	An FTP/X control.

filename	A string expression that specifies the source filename to use with a file-oriented method.

Remarks

The GetFile, PutFile, and Rename methods all require both a source and destination filename.  See each command for details regarding the use of this property.

Data Type

String


State Property

See Also            Error Codes

Description

The current state of the control.

Syntax

object.State

The syntax of the State property has these parts:

Part	   	Description

object	An FTP/X control.

Remarks

This property may take on many values while executing commands.  The only values of use in your program are 0 (Disconnected) and 1 (Connected).  You must not rely on the meaning of any other values which this property may contain.  When State is 0 then the only valid method is Connect.  No other method may be executed while State is not equal to 1 (Connected).

This property is read-only and only available at run-time.

Data Type

Integer


Timeout Property

See Also            Error Codes

Description

Time in seconds to wait for an operation to complete.

Syntax

object.Timeout [= duration ]

The syntax of the Timeout property has these parts:

Part	   	Description

object	An FTP/X control.

duration	An integer that determines how long, in seconds, the control will wait.  Setting to zero means that the control will wait forever.

Remarks

Methods which require interaction with a server may hang indefinitely due to a slow or non-responsive server.  You can set the maximum time to wait for any operation to complete by assigning a non-zero number of seconds to the Timeout property.   When the Timeout property is set to zero there will be no time-out.

Data Type

Integer


Type Property

See Also            Error Codes

Description

Type of data to transfer.

Syntax

object.Type [= type ]

The syntax of the Type property has these parts:

Part	   	Description

object	An FTP/X control.

type	An integer that specifies the method of data transfer (ASCII or binary).

Remarks

FTP servers require that you specify the type of data you expect to be in the files you're transferring back and forth.  The Type property has two possible values:

Value	   	Description

0	ASCII

1	Binary (default)

FTP servers default to ASCII transfers.  Unless you're sure that you will be transferring ASCII-only files, it is best to switch Type to 1 (Binary) prior to any file transfers.

This property defaults to binary transfers (1).

Data Type

Integer (enumerated)


Version Property

Error Codes

Description

Returns the version of the control.

Syntax

object.Version

The syntax of the Version property has these parts:

Part	   	Description

object	An FTP/X control.

Remarks

This property holds the current version of the control.  It is read-only and available at both design-time and run-time.

Data Type

String


Getting Custom Controls Written

If you or your organization would like to have custom controls written, you can contact us at the following:

Mabry Software, Inc.

Post Office Box 31926

Seattle, WA  98103-1926

Phone: 206-634-1443

Fax: 206-632-0272 or 206-364-3196

Internet: mabry@mabry.com

You can also contact Zane Thomas.  He can be reached at:

Zane Thomas

Post Office Box 121

Indianola, WA  98342

Internet: zane@mabry.com


Licensing Information

Legalese Version

Mabry Software grants a license to use the enclosed software to the original purchaser.  Copies may be made for back-up purposes only.  Copies made for any other purpose are expressly prohibited, and adherence to this requirement is the sole responsibility of the purchaser.

Customer written executable applications containing embedded Mabry products may be freely distributed, without royalty payments to Mabry Software, provided that such distributed Mabry product is bound into these applications in such a way so as to prohibit separate use in design mode, and that such Mabry product is distributed only in conjunction with the customers own software product.  The Mabry Software product may not be distributed by itself in any form.

Neither source code for Mabry Software products nor modified source code for Mabry Software products may be distributed under any circumstances, nor may you distribute .OBJ, .LIB, etc. files that contain our routines. This control may be used as a constituent control only if the compound control thus created is distributed with and as an integral part of an application.  Permission to use this control as a constituent control does not grant a right to distribute the license (LIC) file or any other file other than the control executable itself. This license may be transferred to a third party only if all existing copies of the software and its documentation are also transferred.

This product is licensed for use by only one developer at a time.  Mabry Software expressly prohibits installing this product on more than one computer if there is any chance that both copies will be used simultaneously.  This restriction also extends to installation on a network server, if more than one workstation will be accessing the product.  All developers working on a project which includes a Mabry Software product, even though not working directly with the Mabry product, are required to purchase a license for that Mabry product.

This software is provided as is.  Mabry Software makes no warranty, expressed or implied, with regard to the software.  All implied warranties, including the warranties of merchantability and fitness for a particular use, are hereby excluded.

MABRY SOFTWARE'S LIABILITY IS LIMITED TO THE PURCHASE PRICE.  Under no circumstances shall Mabry Software or the authors of this product be liable for any incidental or consequential damages, nor for any damages in excess of the original purchase price.

To be eligible for free technical support by telephone, the Internet, CompuServe, etc. and to ensure that you are notified of any future updates, please complete the enclosed registration card and return it to Mabry Software.

English Version

We require that you purchase one copy of a control per developer on a project.  If this is met, you may distribute the control with your application royalty free.  You may never distribute the LIC file.  You may not change the product in any way that removes or changes the requirement of a license file.

We encourage the use of our controls as constituent controls when the compound controls you create are an integral part of your application.  But we don't allow distribution of our controls as constituents of other controls when the compound control is not part of an application.  The reason we need to have this restriction is that without it someone might decide to use our control as a constituent, add some trivial (or even non-trivial) enhancements and then sell the compound control.  Obviously there would be little difference between that and just plain reselling our control.

If you have purchased the source code, you may not re-distribute the source code either (nor may you copy it into your own project).  Mabry Software retains the copyright to the source code.

Your license is transferable.  The original purchaser of the product must make the transfer request.  Contact us for further information.

The sample versions of our products are intended for evaluation purposes only.  You may not use the sample version to develop completed applications.